package com.he.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.he.domain.dto.ConditionDTO;
import com.he.domain.vo.*;
import com.he.entity.Article;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author He
 * @version 1.0
 * @Date 2023/9/17 16:49
 * @Desc 文章mapper
 */
@Repository
public interface ArticleMapper extends BaseMapper<Article> {


    /**
     * 查询后台文章数量
     *
     * @param condition 条件
     * @return 文章数量
     */
    Long countArticleBackVO(@Param("condition") ConditionDTO condition);

    /**
     * 根据条件查询文章
     *
     * @param limit     页码
     * @param size      大小
     * @param condition 条件
     * @return 文章列表
     */
    List<ArticleConditionVO> listArticleByCondition(@Param("limit") Long limit, @Param("size") Long size, @Param("condition") ConditionDTO condition);


    /**
     * 根据条件查询首页文章
     *
     * @param  limit     页码
     * @param  size      大小
     * @return 文章总数
     */
    List<ArticleHomeVO> selectArticleHomeList(Long limit, Long size);

    /**
     * 查询热门文章
     *
     * @param id 文章id
     * @return 热门文章
     */
    ArticleHotVO selectHotArticle(Integer id);

    /**
     * 根据年份查询文章数量
     *
     * @param year 年份
     * @return 文章数量
     */
    List<ArticleCountDateVO> selectArticleCountAndDate(Integer year);

    /**
     * 查询后台文章列表
     *
     * @param limit     页码
     * @param size      大小
     * @param condition 条件
     * @return 后台文章列表
     */
    List<ArticleBackVO> selectArticleBackVO(@Param("limit") Long limit, @Param("size") Long size, @Param("condition") ConditionDTO condition);

    ArticleInfoVO selectArticleInfoById(Integer articleId);

    /**
     * 文章搜索
     *
     * @param keyword 关键字
     * @return 文章列表
     */
    List<ArticleSearchVO> searchArticle(@Param("keyword") String keyword);

    /**
     * 根据id查询首页文章
     *
     * @param articleId 文章id
     * @return 首页文章
     */
    ArticleVO selectArticleHomeById(Integer articleId);

    /**
     * 查询上一篇文章
     *
     * @param articleId 文章id
     * @return 上一篇文章
     */
    ArticlePaginationVO selectLastArticle(Integer articleId);

    /**
     * 查询下一篇文章
     *
     * @param articleId 文章id
     * @return 下一篇文章
     */
    ArticlePaginationVO selectNextArticle(Integer articleId);
}
